Concepts

Browser Storage: Defining and Running Storage Actions

GPALUrl carries a list of storage actions -- cookies, localStorage, sessionStorage, indexedDb, and cache -- to inspect or change once that URL is active. The With...() calls used to define those actions on the GPALUrl double as filters when called on the browser before RunGet/RunSet/RunDelete, and WithUserDefined gives you a fallback when the built-in fields cannot pin down the action you mean.

OpenAPI Maps: Machine-Readable API Contracts

An OpenAPI specification is a YAML or JSON document that describes a REST API -- its endpoints, required and optional parameters, and response shapes. GPAL.RESTClient.LoadOpenAPIMap() reads one, sets the base URL automatically from the servers block, and validates request parameters before any call leaves your workflow.

Casting - Stream a Tab or Desktop to a Cast Device

GPAL can start and stop Chrome Cast sessions from inside a workflow, routing the browser tab or the full desktop display to any available Cast sink -- a Chromecast, smart TV, or other compatible device on the local network.

Calling a Site's Own API with .Fetch

Most sites render from an API their own pages call. .Fetch issues that call from inside the loaded page, so it carries the browser's cookies, TLS fingerprint, header order and any anti-bot clearance the session has already earned. One declaration serves every row and every page of results.

Running Before the Page Runs

InjectScript registers JavaScript that runs on every new document, ahead of anything the page loads. It is the only moment when what a page is about to read can be seen or changed.

Reading a Next.js Page From Its Own Data

A Next.js page ships the data it rendered from, right there in the html. GetHydratedData hands it back as json, so a workflow reads what the page was built from instead of reading the page.

Seeing What a Page Asks For with .CaptureCalls

A page renders from calls you did not write. .CaptureCalls records them as they happen, url, method, resource type, request headers, body and the status the site answered with, so an endpoint can be read off a site rather than guessed at.

Templates: Repeating the Call a Page Made

Some API calls need a value a workflow cannot know: a token minted per session by the page's own JavaScript, ids the page looked up, headers its code adds. .CaptureCallTemplate waits for the page to make the call and hands it back as a request ready to issue, so the workflow changes only what it cares about.

Continuing as a RESTClient: Taking the Session Out of the Browser

.ContinueAsRESTClient hands the session a browser has earned to a browserless HTTP client: the cookies scoped to that origin, the live user agent, the accept-language actually sent, and any credential the browser holds. The client outlives the browser, which is the point of it.

Running Whole Workflows At Once

GPAL.Workflow runs several independent workflows in parallel, each one building and owning whatever it drives. It throttles how many are in flight, spaces their starts, bounds how long it waits, and hands back what became of each.

Many REST Calls At Once

A REST client carries the call it is building, so parallel work wants a client each rather than one client shared. This is how to fan out over GPAL.RESTClient, where the results collect, and which client you must not fan out on.

Many Browsers At Once

Three engines driving three browsers in one process, at the same time, without treading on each other. The scheduling is the easy half; profiles are where parallel browser work actually fails.

Hidden Desktops: A Real Browser Nobody Can See

WithHiddenDesktop runs a browser on a Win32 desktop object of its own. It is a real window with real rendering that never appears on your screen, never takes your focus, and never eats your keystrokes, which is not the same thing as headless.

💬 Ask GPAL